// 自定义指令
angular.module("bw.directive")
    //返回顶部
    .directive('backTop', function() {
        return {
            restrict: 'A',
            replace: true,
            template: '<div class="back-top"  ng-show="isShowBackTop"></div>',
            link: function(scope, element, attrs, ctrl) {
                // 监听页面滚动的事件
                document.onscroll = listenScroll;
                scope.isShowBackTop = false; //默认是  不显示
                //页面销毁事件
                scope.$on("$destroy", function() {
                    //解除滚动事件监听
                    document.onscroll = null;
                })

                if (attrs.backTop) {
                    element.css({
                        right: attrs.backTop.right,
                        bottom: attrs.backTop.bottom
                    });
                }

                //监听事件
                function listenScroll() {
                    var scrollContent = document.activeElement;
                    if (scrollContent.scrollTop + scrollContent.offsetHeight - 100 > scrollContent.scrollHeight) {
                        scope.isShowBackTop = true;
                    } else {
                        scope.isShowBackTop = false;
                    }
                    scope.$apply();
                }

                element.bind("click touchend", function() {
                    document.body.scrollTop = 0;
                });
            }
        }
    })
    // 倒计时
    .directive('backTime', function() {
        return {
            restrict: 'A',
            scope: {
                transactiontime: '=',
                servertime: '=',
                minute: '=',
                second: '='
            },
            link: function(scope, element, attr) {
                function getTime() {
                    var endTime = parseInt(scope.transactiontime + 30 * 60 * 1000);
                    scope.minute = parseInt((endTime - parseInt(scope.servertime)) / 60 / 1000);
                    scope.second = parseInt((endTime - parseInt(scope.servertime)) / 1000 - scope.minute * 60);
                    scope.servertime += 1000;
                    scope.$apply();
                }
                setInterval(function() {
                    getTime();
                }, 1000);
            }
        }
    })
    // 输入框上移
    .directive('inputMove', function() {
        return {
            restrict: 'A',
            link: function(scope, element, attr) {
                element.bind('focus', function() {
                    var h = element.offset().top;
                    setTimeout(function() {
                        document.body.scrollTop = h;
                    }, 500);
                });
            }
        }
    }) // 输入框点击去掉placehodler
    .directive('inputPlaceholder', function() {
        return {
            restrict: 'A',
            link: function(scope, element, attr) {
                element.attr('placeholder', attr.inputPlaceholder);
                element.bind('focus', function() {
                    element.attr('placeholder', "");
                });
                element.bind('blur', function() {
                    element.attr('placeholder', attr.inputPlaceholder);
                });
            }
        }
    })

angular.module("bw.services")
    .factory("baseService", ['ENV', '$state', '$rootScope', '$cookieStore', '$resource', function(ENV, $state, $rootScope, $cookieStore, $resource) {
        var resource = $resource(ENV.api, {}, {
            getWxToken: {
                method: 'GET', //输入用户信息获取航班信息
                url: ENV.api + "Weixin/GetToken"
            }
        });

        var getUrlParams = function(url) {
            var args = {};
            url = url || location.href;
            try {
                var pairs = url.split("?")[1].split('&');
                for (var i = 0; i < pairs.length; i++) {
                    var pos = pairs[i].split('=');
                    if (pos.length == 1) {
                        continue;
                    }
                    args[pos[0]] = decodeURIComponent(pos[1]);
                }
            } catch (e) {

            }
            return args;
        }
        var baseService = {
            /**验证手机号
             * [validatemobile description]
             * @param  {[type]}   mobile   [description]
             * @param  {Function} callback [description]
             * @return {[type]}            [description]
             */
            validatemobile: function(mobile) {
                //var myreg = /^(((13[0-9]{1})|(17[0-9]{1})|(15[0-9]{1})|(18[0-9]{1}))+\d{8})$/;
                var myreg = /^[0-9]{3,4}\-?[0-9]{3,21}$/;
                if (!myreg.test(mobile)) {
                    return false;
                } else {
                    return true;
                }
            },
            /**日期转时间戳
             * [tranTime description]
             * @param  {[type]} date [description]
             * @return {[type]}      [description]
             */
            tranTime: function(date) {
                date = date.replace(/-/g, '/');
                var timestamp = new Date(date).getTime();
                return timestamp;
            },
            /**
             * [setItem description]
             * 向localStorage存数据
             * 
             * @author  fengzhaoquan@bestwise.com
             * @DateTime 2017-01-12T16:53:27+0800
             * @param    {[type]}                 key  [description]
             * @param    {[type]}                 data [description]
             */
            setItem: function(key, data) {
                localStorage.setItem(key, JSON.stringify(data));
            },
            /**
             * [getItem description]
             * 从localStorage取数据
             * 
             * @author  fengzhaoquan@bestwise.com
             * @DateTime 2017-01-12T16:55:03+0800
             * @param    {[type]}                 key [description]
             * @return   {[type]}                     [description]
             */
            getItem: function(key) {
                return localStorage.getItem(key) ? JSON.parse(localStorage.getItem(key)) : null;
            },
            //写入session缓存 时间以秒计算
            addSession: function(obj) {
                var msg = {
                    info: obj.info,
                    time: new Date().getTime(),
                    livetime: obj.time
                };
                sessionStorage[obj.name] = JSON.stringify(msg);
            },
            //取session缓存
            getSession: function(name) {
                if (typeof(sessionStorage[name]) == 'undefined' || sessionStorage[name] === null || sessionStorage[name] === 'null') {
                    return null;
                } else {
                    msg = JSON.parse(sessionStorage[name]);
                    if (!msg.info || msg.info === null || msg.info.length === 0) return null;
                }
                if (msg.livetime) {
                    if (msg.time + msg.livetime * 1000 < new Date().getTime()) return null;
                }
                return msg.info;
            },
            /**
             * [getUrlParams description]
             * 获取传入url地址中的参数对象，否则计算当前页面的url
             * 
             * @author  fengzhaoquan@bestwise.com
             * @DateTime 2017-01-12T16:59:39+0800
             * @param    {[type]}                 url [url地址]
             * @return   {[type]}                     [map]
             */
            getUrlParams: function(url) {
                var args = {};
                url = url || location.href;
                var pairs = url.split("?")[1].split('&');
                for (var i = 0; i < pairs.length; i++) {
                    var pos = pairs[i].split('=');
                    if (pos.length == 1) {
                        continue;
                    }
                    args[pos[0]] = decodeURIComponent(pos[1]);
                }
                return args;
            },
            /**
             * [isWxBower description]
             * 判断当前浏览器是否微信的内核
             * 
             * @author  fengzhaoquan@bestwise.com
             * @DateTime 2017-01-12T17:04:18+0800
             * @return   {Boolean}                [description]
             */
            isWxBower: function() {
                var ua = navigator.userAgent.toLowerCase();
                return ua.match(/MicroMessenger/i) == "micromessenger";
            },

            /**
             * [getUserAgent description]
             * 判断用户的设备类型
             * 
             * @author  fengzhaoquan@bestwise.com
             * @DateTime 2017-01-13T03:07:19+0800
             * @return   {[type]}                 [description]
             */
            getUserAgent: function() {
                var ua = navigator.userAgent.toLowerCase();
                if (ua.match(/iPhone\sOS/i) == "iphone os") {
                    return "ios";
                } else if (ua.match(/Android/i) == "android") {
                    return "android";
                } else {
                    return "other";
                }
            },

            formateToDate: function(source, char) {
                var result = "";
                try {
                    var _t = new Date(source);
                    result = _t.getFullYear() + char + buling(_t.getMonth() + 1) + char + buling(_t.getDate());
                } catch (ex) {
                    result = "";
                }
                return result;
            },
            formateToTime: function(source, char) {
                var result = "";
                try {
                    var _t = new Date(source);
                    result = buling(_t.getHours()) + char + buling(_t.getMinutes());
                } catch (ex) {
                    result = "";
                }
                return result;
            },


            /**数组移除指定值元素
             * [removeArray description]
             * @param  {[type]} array [description]数组
             * @param  {[type]} value [description]指定值
             * @return {[type]}       [description]
             */
            removeArray: function(array, value) {
                Array.prototype.indexOf = function(val) {
                    for (var i = 0; i < this.length; i++) {
                        if (this[i] == val) return i;
                    }
                    return -1;
                };
                Array.prototype.remove = function(val) {
                    var index = this.indexOf(val);
                    if (index > -1) {
                        this.splice(index, 1);
                    }
                };
                array.remove(value);
            },

            // 获取code
            getToken: function(callback) {
                if (baseService.getItem("_token")) {
                    window._token = baseService.getItem("_token");
                } else {
                    var code = getUrlParams(location.href)['code'];
                    if (!code) {
                        window.location.href = 'https://open.weixin.qq.com/connect/oauth2/authorize?scope=snsapi_base&response_type=code&appid=' + ENV.appId + '&redirect_uri=' + encodeURIComponent(location.href.split('#')[0]);
                        return;
                    }
                    // 将code传参给后台
                    return resource.getWxToken({ wXCode: code }, null,function(response) {
                        if (response.Status == 1) {
                            baseService.setItem("_token", response.Data.AccessToken);
                            window._token = response.Data.AccessToken;
                        }
                        callback && callback(response);
                    });
                }
                callback && callback();
            },
            shareTo: function(url, img) {
                wx.onMenuShareAppMessage({
                    title: '菲比未来星', // 分享标题
                    desc: '菲比陪伴宝贝在快乐中成长，我迈出了第一步，你准备好了吗？', // 分享描述
                    link: url, // 分享链接
                    imgUrl: img, // 分享图标
                    type: '', // 分享类型,music、video或link，不填默认为link
                    dataUrl: '', // 如果type是music或video，则要提供数据链接，默认为空
                    success: function() {
                        // 用户确认分享后执行的回调函数
                        $("#choiceShare").css({
                            'display': 'none'
                        });
                        $(".modal-backdrop").css({
                            'display': 'none'
                        });
                    },
                    cancel: function() {
                        // 用户取消分享后执行的回调函数
                        $("#choiceShare").css({
                            'display': 'none'
                        });
                        $(".modal-backdrop").css({
                            'display': 'none'
                        });


                    }
                });
                wx.onMenuShareTimeline({
                    title: '菲比未来星', // 分享标题
                    desc: '菲比陪伴宝贝在快乐中成长，我迈出了第一步，你准备好了吗？', // 分享描述
                    link: url, // 分享链接
                    imgUrl: img, // 分享图标
                    type: '', // 分享类型,music、video或link，不填默认为link
                    dataUrl: '', // 如果type是music或video，则要提供数据链接，默认为空
                    success: function() {
                        // 用户确认分享后执行的回调函数
                        $("#choiceShare").css({
                            'display': 'none'
                        });
                        $(".modal-backdrop").css({
                            'display': 'none'
                        });

                    },
                    cancel: function() {
                        // 用户取消分享后执行的回调函数
                        $("#choiceShare").css({
                            'display': 'none'
                        });
                        $(".modal-backdrop").css({
                            'display': 'none'
                        });
                    }
                });
            },
            setTitle: function(name) {
                document.title = name;
                //微信中的浏览器中单页面第一次加载成功后，不再监听tile的变化,通过iframe来触发 页面重新来监听
                var $body = $('body');
                var $iframe = $("<iframe style='opacity: 0;' src='/favicon.ico'></iframe>");
                $iframe.on('load', function() {
                    setTimeout(function() {
                        $iframe.off('load').remove();
                    }, 0);
                }).appendTo($body);
            }
        }
        return baseService;


        function buling(no) {
            return no < 10 ? "0" + no : no;
        }
    }])
    .factory("baiduService", ['ENV', '$state', '$rootScope', '$cookieStore', '$resource', function(ENV, $state, $rootScope, $cookieStore, $resource) {
        var resource = $resource(ENV.api, {}, {
            getBaiduSugestAddressList: {
                method: 'GET', //输入用户信息获取航班信息
                url: ENV.baiduMap.suggestionUrl
            },
            get_BaiduSugestAddressList: {
                method: 'GET', //输入用户信息获取航班信息
                url: ENV.api + "Trips/GetAddress"
            },
            getTrackHistoryUrl: {
                isLoading: false,
                method: 'POST', //查询鹰眼中某一监控对象的历史轨迹点【一天24小时内的】
                url: ENV.api + "Trips/GetHistory" //ENV.baiduMap.trackHistoryUrl
            }
        });
        return {
            getBaiduSugestAddressList: function(params, callback) {
                return resource.getBaiduSugestAddressList(params, null,
                    function(response) {
                        callback && callback(response);
                    });
            },
            get_BaiduSugestAddressList: function(params, callback) {
                return resource.get_BaiduSugestAddressList(params, null,
                    function(response) {
                        callback && callback(response);
                    });
            },
            getTrackHistoryUrl: function(params, callback) {
                return resource.getTrackHistoryUrl(null, params,
                    function(response) {
                        callback && callback(response);
                    });
            },
            /**创建地图
             * [initMap description]
             * @param  {[type]} id            [description]地图显示位置id
             * @param  {[type]} nearLatitude  [description]最近商家纬度
             * @param  {[type]} nearLongitude [description]最近商家经度
             * @return {[type]}               [description]
             */
            initMap: function(id) {
                console.log('最近商家', $rootScope.nearObj.Lat);
                //定义map变量 调用 qq.maps.Map() 构造函数   获取地图显示容器
                var map = new qq.maps.Map(document.getElementById(id), {
                    center: new qq.maps.LatLng($rootScope.nearObj.Lat, $rootScope.nearObj.Lng), // 地图的中心地理坐标。
                    zoom: 13, // 地图的中心地理坐标。
                    panControl: false, //平移控件的初始启用/停用状态。      
                    zoomControl: false, //缩放控件的初始启用/停用状态。
                    scaleControl: true //滚动控件的初始启用/停用状态。

                });
                return map;
            },
            /**添加标记
             * [addMarker description]
             * @param {[type]} $rootScope.zj [description]商家信息
             * @param {[type]} nearPoint  [description]距离最近的点,默认标记
             */
            addMarker: function(map) {

            },
            /**验证手机号
             * [validatemobile description]
             * @param  {[type]}   mobile   [description]
             * @param  {Function} callback [description]
             * @return {[type]}            [description]
             */
            validatemobile: function(mobile, callback1, callback2) {
                //var myreg = /^(((13[0-9]{1})|(15[0-9]{1})|(18[0-9]{1}))+\d{8})$/;
                var myreg = /^[0-9]{3,4}\-?[0-9]{3,21}$/;
                if (!myreg.test(mobile)) {
                    callback1();
                } else {
                    callback2();
                }
            },
            /**日期转时间戳
             * [tranTime description]
             * @param  {[type]} date [description]
             * @return {[type]}      [description]
             */
            tranTime: function(date) {
                date = date.replace(/-/g, '/');
                var timestamp = new Date(date).getTime();
                return timestamp;
            },

            /**数组移除指定值元素
             * [removeArray description]
             * @param  {[type]} array [description]数组
             * @param  {[type]} value [description]指定值
             * @return {[type]}       [description]
             */
            removeArray: function(array, value) {
                Array.prototype.indexOf = function(val) {
                    for (var i = 0; i < this.length; i++) {
                        if (this[i] == val) return i;
                    }
                    return -1;
                };
                Array.prototype.remove = function(val) {
                    var index = this.indexOf(val);
                    if (index > -1) {
                        this.splice(index, 1);
                    }
                };
                array.remove(value);
            },

            // 获取code
            getCode: function(callback) {
                if ($cookieStore.get("openId")) {
                    window.openId = $cookieStore.get("openId");
                } else {
                    var code = dataService.getUrlParams('code');
                    // 将code传参给后台
                    // userService.sendCode(code, function(response) {
                    //     if (response.Status == 1 && response.Data != "") {
                    //         window.openId = response.Data;
                    //         $cookieStore.put("openId", window.openId);
                    //         console.log('发送code成功！');
                    //         if (callback) {
                    //             callback();
                    //         }
                    //     }
                    // });
                }
                $cookieStore.put("openId", window.openId);
                callback && callback();
            },
            shareTo: function(url, img) {
                wx.onMenuShareAppMessage({
                    title: '菲比未来星', // 分享标题
                    desc: '菲比陪伴宝贝在快乐中成长，我迈出了第一步，你准备好了吗？', // 分享描述
                    link: url, // 分享链接
                    imgUrl: img, // 分享图标
                    type: '', // 分享类型,music、video或link，不填默认为link
                    dataUrl: '', // 如果type是music或video，则要提供数据链接，默认为空
                    success: function() {
                        // 用户确认分享后执行的回调函数
                        $("#choiceShare").css({
                            'display': 'none'
                        });
                        $(".modal-backdrop").css({
                            'display': 'none'
                        });
                    },
                    cancel: function() {
                        // 用户取消分享后执行的回调函数
                        $("#choiceShare").css({
                            'display': 'none'
                        });
                        $(".modal-backdrop").css({
                            'display': 'none'
                        });


                    }
                });
                wx.onMenuShareTimeline({
                    title: '菲比未来星', // 分享标题
                    desc: '菲比陪伴宝贝在快乐中成长，我迈出了第一步，你准备好了吗？', // 分享描述
                    link: url, // 分享链接
                    imgUrl: img, // 分享图标
                    type: '', // 分享类型,music、video或link，不填默认为link
                    dataUrl: '', // 如果type是music或video，则要提供数据链接，默认为空
                    success: function() {
                        // 用户确认分享后执行的回调函数
                        $("#choiceShare").css({
                            'display': 'none'
                        });
                        $(".modal-backdrop").css({
                            'display': 'none'
                        });

                    },
                    cancel: function() {
                        // 用户取消分享后执行的回调函数
                        $("#choiceShare").css({
                            'display': 'none'
                        });
                        $(".modal-backdrop").css({
                            'display': 'none'
                        });
                    }
                });
            }

        }
    }])
    .factory("toast", ['$compile', '$document', function($compile, $document) {
        var toast = {
            showToast: function(text, time) {
                var toast = angular.element('<div class="bw-toast"><div class="toast-body"><div class="toast-content ng-binding">' + text + '</div></div></div>');
                $document.find("body").append(toast);
                $document.find('.bw-toast').bind('click', function() {
                    toast.remove();
                })
                setTimeout(function() {
                    toast.remove();
                }, time || 4000);
            },
            showLoading: function() {
                var toast = angular.element('<div class="bw-toast"><div class="toast-body"><div class="toast-content ng-binding"><img src="./imgs/load.gif" alt="" style="width:85px"/></div></div></div>');
                var id = "loading-" + new Date().getTime();
                toast.attr({
                    'id': id
                });
                $document.find("body").append(toast);
                return id;
            },
            hideLoading: function(id) {
                $document.find('div#' + id).remove();
            }
        };
        return toast;
    }]);

angular.module("bw.filters")
    .filter('trustAsHtml', ['$sce', function($sce) {
        return function(text) {
            return $sce.trustAsHtml(text);
        };
    }])
